home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 22 / PCPP #22.iso / Quake2 / q2source_12_11 / utils3 / bsp / qbsp3 / gldraw.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-09  |  3.7 KB  |  212 lines

  1.  
  2. #include <windows.h>
  3. #include <GL/gl.h>
  4. #include <GL/glu.h>
  5. #include <GL/glaux.h>
  6.  
  7. #include "qbsp.h"
  8.  
  9. // can't use the glvertex3fv functions, because the vec3_t fields
  10. // could be either floats or doubles, depending on DOUBLEVEC_T
  11.  
  12. qboolean    drawflag;
  13. vec3_t    draw_mins, draw_maxs;
  14.  
  15.  
  16. #define    WIN_SIZE    512
  17.  
  18. void InitWindow (void)
  19. {
  20.     auxInitDisplayMode (AUX_SINGLE | AUX_RGB);
  21.     auxInitPosition (0, 0, WIN_SIZE, WIN_SIZE);
  22.     auxInitWindow ("qcsg");
  23. }
  24.  
  25. void Draw_ClearWindow (void)
  26. {
  27.     static int    init;
  28.     int        w, h, g;
  29.     vec_t    mx, my;
  30.  
  31.     if (!drawflag)
  32.         return;
  33.  
  34.     if (!init)
  35.     {
  36.         init = true;
  37.         InitWindow ();
  38.     }
  39.  
  40.     glClearColor (1,0.8,0.8,0);
  41.     glClear (GL_COLOR_BUFFER_BIT);
  42.  
  43.     w = (draw_maxs[0] - draw_mins[0]);
  44.     h = (draw_maxs[1] - draw_mins[1]);
  45.  
  46.     mx = draw_mins[0] + w/2;
  47.     my = draw_mins[1] + h/2;
  48.  
  49.     g = w > h ? w : h;
  50.  
  51.     glLoadIdentity ();
  52.     gluPerspective (90,  1,  2,  16384);
  53.     gluLookAt (mx, my, draw_maxs[2] + g/2, mx , my, draw_maxs[2], 0, 1, 0);
  54.  
  55.     glColor3f (0,0,0);
  56. //    glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
  57.     glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
  58.     glDisable (GL_DEPTH_TEST);
  59.     glEnable (GL_BLEND);
  60.     glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  61.  
  62. #if 0
  63.     glColor4f (1,0,0,0.5);
  64.     glBegin (GL_POLYGON);
  65.  
  66.     glVertex3f (0, 500, 0);
  67.     glVertex3f (0, 900, 0);
  68.     glVertex3f (0, 900, 100);
  69.     glVertex3f (0, 500, 100);
  70.  
  71.     glEnd ();
  72. #endif
  73.  
  74.     glFlush ();
  75.  
  76. }
  77.  
  78. void Draw_SetRed (void)
  79. {
  80.     if (!drawflag)
  81.         return;
  82.  
  83.     glColor3f (1,0,0);
  84. }
  85.  
  86. void Draw_SetGrey (void)
  87. {
  88.     if (!drawflag)
  89.         return;
  90.  
  91.     glColor3f (0.5,0.5,0.5);
  92. }
  93.  
  94. void Draw_SetBlack (void)
  95. {
  96.     if (!drawflag)
  97.         return;
  98.  
  99.     glColor3f (0,0,0);
  100. }
  101.  
  102. void DrawWinding (winding_t *w)
  103. {
  104.     int        i;
  105.  
  106.     if (!drawflag)
  107.         return;
  108.  
  109.     glColor4f (0,0,0,0.5);
  110.     glBegin (GL_LINE_LOOP);
  111.     for (i=0 ; i<w->numpoints ; i++)
  112.         glVertex3f (w->p[i][0],w->p[i][1],w->p[i][2] );
  113.     glEnd ();
  114.  
  115.     glColor4f (0,1,0,0.3);
  116.     glBegin (GL_POLYGON);
  117.     for (i=0 ; i<w->numpoints ; i++)
  118.         glVertex3f (w->p[i][0],w->p[i][1],w->p[i][2] );
  119.     glEnd ();
  120.  
  121.     glFlush ();
  122. }
  123.  
  124. void DrawAuxWinding (winding_t *w)
  125. {
  126.     int        i;
  127.  
  128.     if (!drawflag)
  129.         return;
  130.  
  131.     glColor4f (0,0,0,0.5);
  132.     glBegin (GL_LINE_LOOP);
  133.     for (i=0 ; i<w->numpoints ; i++)
  134.         glVertex3f (w->p[i][0],w->p[i][1],w->p[i][2] );
  135.     glEnd ();
  136.  
  137.     glColor4f (1,0,0,0.3);
  138.     glBegin (GL_POLYGON);
  139.     for (i=0 ; i<w->numpoints ; i++)
  140.         glVertex3f (w->p[i][0],w->p[i][1],w->p[i][2] );
  141.     glEnd ();
  142.  
  143.     glFlush ();
  144. }
  145.  
  146. //============================================================
  147.  
  148. #define    GLSERV_PORT    25001
  149.  
  150. qboolean    wins_init;
  151. int            draw_socket;
  152.  
  153. void GLS_BeginScene (void)
  154. {
  155.     WSADATA    winsockdata;
  156.     WORD    wVersionRequested; 
  157.     struct sockaddr_in    address;
  158.     int        r;
  159.  
  160.     if (!wins_init)
  161.     {
  162.         wins_init = true;
  163.  
  164.         wVersionRequested = MAKEWORD(1, 1); 
  165.  
  166.         r = WSAStartup (MAKEWORD(1, 1), &winsockdata);
  167.  
  168.         if (r)
  169.             Error ("Winsock initialization failed.");
  170.  
  171.     }
  172.  
  173.     // connect a socket to the server
  174.  
  175.     draw_socket = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
  176.     if (draw_socket == -1)
  177.         Error ("draw_socket failed");
  178.  
  179.     address.sin_family = AF_INET;
  180.     address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
  181.     address.sin_port = GLSERV_PORT;
  182.     r = connect (draw_socket, (struct sockaddr *)&address, sizeof(address));
  183.     if (r == -1)
  184.     {
  185.         closesocket (draw_socket);
  186.         draw_socket = 0;
  187.     }
  188. }
  189.  
  190. void GLS_Winding (winding_t *w, int code)
  191. {
  192.     byte    buf[1024];
  193.     int        i, j;
  194.  
  195.     if (!draw_socket)
  196.         return;
  197.  
  198.     ((int *)buf)[0] = w->numpoints;
  199.     ((int *)buf)[1] = code;
  200.     for (i=0 ; i<w->numpoints ; i++)
  201.         for (j=0 ; j<3 ; j++)
  202.             ((float *)buf)[2+i*3+j] = w->p[i][j];
  203.  
  204.     send (draw_socket, buf, w->numpoints*12+8, 0);
  205. }
  206.  
  207. void GLS_EndScene (void)
  208. {
  209.     closesocket (draw_socket);
  210.     draw_socket = 0;
  211. }
  212.